// void addWord(word)
// bool search(word)
// search(word) 可以搜索文字或正则表达式字符串，字符串只包含字母 . 或 a-z 。
// . 可以表示任何一个字母。

// addWord("bad")
// addWord("dad")
// addWord("mad")
// search("pad") -> false
// search("bad") -> true
// search(".ad") -> true
// search("b..") -> true
// 说明:
// 你可以假设所有单词都是由小写字母 a-z 组成的。

class WordDictionary {
  constructor() {
    this.map = new Map()
  }
  addWord(str) {
    // 获取字符串的长度
    const length = str.length
    // 判断这个长度的字符串是否已经保存过了
    const item = this.map.get(length)
    if (item !== undefined) {
      // 如果已经存在则
      item.push(str)
    } else {
      this.map.set(length, [str])
    }
  }
  search(word) {
    // 获取到当前搜索的 长度
    const len = word.length
    // 判断这个长度是否在map集合中存在
    const result = this.map.get(len)
    // 如果不存在则 返回false
    if (result === undefined) {
      return false
    }
    // 如果存在则从数组中查找

    // 判断是否是正则（包不包含'.'）
    if (!word.includes('.')) {
      // 如果不包含. 运算符
      // 直接查找数组中是否包含
      return result.includes(word)

    }
    // 如果包含.字符串则说明是正则需要匹配正则返回
    const reg = new RegExp(word)
    return result.some(item => {
      return reg.test(item)
    })
  }
}

const test = new WordDictionary()
test.addWord('abc')
test.addWord('cbc')
test.addWord('acbc')
console.log(test.search('.bcc'))
console.log(test.search('acb'))
console.log(test.map)

